/**
 * 用户认证相关API
 */
import { get, post } from '../utils/require'

// 用户信息接口
interface UserInfo {
  id: number
  username: string
  email: string
  first_name: string
  last_name: string
  is_staff: boolean
  is_active: boolean
  date_joined?: string
  profile?: {
    age: number | null
    gender: string | null
    occupation: string | null
    privacy_level: number
  }
}

// 登录参数
interface LoginParams {
  username: string
  password: string
}

// 注册参数
interface RegisterParams {
  username: string
  password: string
  email?: string
  first_name?: string
  last_name?: string
}

// 认证状态
interface AuthStatus {
  is_authenticated: boolean
  username: string | null
}

/**
 * 用户登录
 */
export function login(params: LoginParams) {
  return post<UserInfo>('/xinshi/auth/login', params)
}

/**
 * 用户注册
 */
export function register(params: RegisterParams) {
  return post<UserInfo>('/xinshi/auth/register', params)
}

/**
 * 获取用户信息
 */
export function getUserInfo() {
  return get<UserInfo>('/xinshi/auth/info')
}

/**
 * 用户登出
 */
export function logout() {
  return post('/xinshi/auth/logout')
}

/**
 * 检查认证状态
 */
export function checkAuth() {
  return get<AuthStatus>('/xinshi/auth/check', {}, false)
}

/**
 * 用户登录并保存信息
 */
export async function loginAndSave(params: LoginParams) {
  try {
    const res = await login(params)
    
    // 保存用户信息到本地存储
    wx.setStorageSync('userInfo', res.data)
    wx.setStorageSync('isLogin', true)
    
    wx.showToast({
      title: '登录成功',
      icon: 'success',
      duration: 2000
    })
    
    return res
  } catch (error) {
    console.error('登录失败:', error)
    throw error
  }
}

/**
 * 用户注册并登录
 */
export async function registerAndLogin(params: RegisterParams) {
  try {
    // 先注册
    await register(params)
    
    // 再登录
    const loginRes = await loginAndSave({
      username: params.username,
      password: params.password
    })
    
    wx.showToast({
      title: '注册成功',
      icon: 'success',
      duration: 2000
    })
    
    return loginRes
  } catch (error) {
    console.error('注册失败:', error)
    throw error
  }
}

/**
 * 登出并清除本地信息
 */
export async function logoutAndClear() {
  try {
    await logout()
    
    // 清除本地存储
    wx.removeStorageSync('userInfo')
    wx.removeStorageSync('isLogin')
    
    wx.showToast({
      title: '已登出',
      icon: 'success',
      duration: 2000
    })
  } catch (error) {
    console.error('登出失败:', error)
    throw error
  }
}

/**
 * 检查是否登录
 */
export function isLoggedIn(): boolean {
  return wx.getStorageSync('isLogin') || false
}

/**
 * 获取本地存储的用户信息
 */
export function getLocalUserInfo(): UserInfo | null {
  return wx.getStorageSync('userInfo') || null
}